# -*- coding: utf-8 -*-
'''
Created on 08/03/2011

@author: cgaray
@contact: cdaniel.py@gmail.com.py
@summary: estructura basica de las clases de acceso a las bases de datos
'''


class ConectorBase(object):
    '''
    estructura basica de las clases de acceso a las bases de datos
    '''
    
    NO_HAY_FILAS_DEVUELTAS = '''NO_HAY_FILAS_DEVUELTAS'''
    
    _cServidor   = ""
    _nPuerto     = 0
    _cServicio   = ""
    
    _cUsuario    = ""
    _cContrasena = ""
    _cCatalogo   = ""
    
    bMostrar_sql = False
    bConectado   = False
    
    
    
    
    def __init__(self, cUsuarioParam, cContrasenaParam, cServidorParam
                 , cCatalogoParam, nPuertoParam, cServicioParam):
        '''
        inicializador de la clase
        cUsuarioParam    = id de usuario de la base de datos
        cContrasenaParam = contrasena de usuario
        cServidorParam   = servidor de base de datos
        cCatalogoParam   = nombre del catalogo o esquema de datos
        nPuertoParam     = puerto de escucha del servicio
        cServicioParam   = nombre del servicio
        '''
        
        #asignamos los valores de los atributos
        self._cServidor   = cServidorParam
        self._nPuerto     = nPuertoParam
        self._cServicio   = cServicioParam
        
        self._cUsuario    = cUsuarioParam
        self._cContrasena = cContrasenaParam
        self._cCatalogo   = cCatalogoParam
        
    
    
    def lConectar(self):
        '''Metodo de conexion al motor de base de datos'''
        
        NOMBRE_METODO = "lConectar()"
        
        #resultado por defecto
        lResultado = [0, NOMBRE_METODO + " no Implementado"]
        
        #devolvemos el resultado del metodo
        return lResultado
        
    
    
    def lDesconectar(self):
        '''Metodo de desconexion del motor de base de datos'''
        
        NOMBRE_METODO = "lDesconectar()"
        
        #resultado por defecto
        lResultado = [0, NOMBRE_METODO + " no Implementado"]
        
        #devolvemos el resultado del metodo
        return lResultado
        
    
    
    def lGet_cursor(self):
        '''Devuelve un cursor'''
        
        NOMBRE_METODO = "lGet_cursor()"
        
        #resultado por defecto
        lResultado = [0, NOMBRE_METODO + " no Implementado"]
        
        #devolvemos el resultado del metodo
        return lResultado
        
    
    
    def lEjecutar_sentencia(self, cSentenciaSQL, dicValores):
        '''ejecuta una sentencia y devuelve el resultado de la ejecucion
        cSentenciaSQL = sentencia sql a ejecutar
        dicValores    = diccionario de pares parametro:valor
        '''
        
        NOMBRE_METODO = "lEjecutar_sentencia()"
        
        #resultado por defecto
        lResultado = [0, NOMBRE_METODO + " no Implementado"]
        
        #devolvemos el resultado del metodo
        return lResultado
        
    
    
    def lEjecutar_consulta(self, cConsultaSQL, dicValores):
        '''ejecuta una consulta y devuelve el resultado de la ejecucion
        cConsultaSQL = consulta sql a ejecutar
        dicValores   = diccionario de pares parametro:valor
        '''
        
        NOMBRE_METODO = "lEjecutar_consulta()"
        
        #resultado por defecto
        lResultado = [0, NOMBRE_METODO + " no Implementado"]
        
        #devolvemos el resultado del metodo
        return lResultado
        
    
    
    def lEjecutar_procedimiento(self, cProcedimiento, dicValores):
        '''ejecuta el procedimiento y devuelve el resultado de la ejecucion
        cProcedimiento = procedimiento almacenado a ejecutar
        dicValores     = diccionario de pares parametro:valor
        '''
        
        NOMBRE_METODO = "lEjecutar_procedimiento()"
        
        #resultado por defecto
        lResultado = [0, NOMBRE_METODO + " no Implementado"]
        
        #devolvemos el resultado del metodo
        return lResultado
        
    
    
    def Set_autocomit(self, boolean):
        '''Establece el modo de confirmacion de transacciones'''
        
        pass
        
    
    
    def lIniciar_transaccion(self):
        '''Inicia una Transaccion'''
        
        NOMBRE_METODO = "lIniciar_transaccion()"
        
        #resultado por defecto
        lResultado = [0, NOMBRE_METODO + " no Implementado"]
        
        #devolvemos el resultado del metodo
        return lResultado
        
    
    
    def lConfirmar_transaccion(self):
        '''Confirma una Transaccion'''
        
        NOMBRE_METODO = "lConfirmar_transaccion()"
        
        #resultado por defecto
        lResultado = [0, NOMBRE_METODO + " no Implementado"]
        
        #devolvemos el resultado del metodo
        return lResultado
        
    
    
    def lRevertir_transaccion(self):
        '''Revierte una Transaccion'''
        
        NOMBRE_METODO = "lRevertir_transaccion()"
        
        #resultado por defecto
        lResultado = [0, NOMBRE_METODO + " no Implementado"]
        
        #devolvemos el resultado del metodo
        return lResultado
        
    
    
    def Mostrar_sql(self, cSentencia):
        '''
        imprime la sentencia sql en ejecucion
        '''
        
        if self.bMostrar_sql: print cSentencia 
        
    
    
    def __str__(self):
        '''metodo de descripcion de la clase'''
        
        return "<Acceso a BD: %s@%s:%s >" % (self._cUsuario, self._cServidor
                                                , str(self._nPuerto))
        
    
    